<?php
/**
 * Стартовый плагин, установка стартовых параметров в системе
 *
 *
 */
class Arm_Controller_Plugin_CliBootstrap extends Zend_Controller_Plugin_Abstract
{

    /**
     * Проверка зарегистрировани ли язык в системе, не выключен ли вызываемый модуль
     * @param Zend_Controller_Request_Abstract $request
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        // удалим viewRenderer
         Zend_Controller_Action_HelperBroker::removeHelper('ViewRenderer');    
    	// смотрим нету ли ошибки по языкам.
        $le = Arm_Translate::getInstance()->getErrorLang();
        if($le !== false) {
            throw  new Arm_Translate_Exception(Arm_Translate::_('В системе не зарегистрирован язык "%s"', $le), 404);
        } else {
            Arm_Translate::getInstance()->addTranslateModule($request->getModuleName());
        }
 
      // Проверка что модуль не выключен
        $modules = Arm_Module::getInstance()->getDataModules();
        if(0 === (int)$modules[$request->getModuleName()]['on']) {
            throw new Arm_Module_Exception(Arm_Translate::_('Модуль %s временно выключен', $request->getModuleName()));
        }
    }

    /**
     * Если консольный вызове перекодируем выходные данные в кодировку консоли.
     */
    public function dispatchLoopShutdown()
    {
        // если cron запрос то не выполняем перекодировку
        if(Zend_Controller_Front::getInstance()->getRequest()->getParam(Arm_Cron::CRON_RUN_PARAM, false) === false) {
            // проверим что кодировку не совпадают.
            $systemCharset = Arm_Core::getConfigApplication()->system->charset;
            $consoleCharset = Arm_Core::getConfigApplication()->system->charsetConsole;
            if(strcasecmp($systemCharset, $consoleCharset) === 0) {
                return;
            }
            $copyring = new Arm_View_Helper_ArmCopyright();
            $body  = $copyring->armCopyright() . "\n\n";
            $body .= $this->getResponse()->getBody();
            $body .= "\n\n" . Arm_Translate::_('Время работы: %s', Arm_Core::getTimeRun(APPLICATION_TIME_START, microtime(true), 3));
            $body = iconv($systemCharset,$consoleCharset . '//IGNORE', $body);
            $this->getResponse()->clearBody();
            $this->getResponse()->setBody($body);
        }
        return;
    }
    

}